<?php

class CartaOrdensController extends AppController {

    var $name = 'CartaOrdens';
    var $uses = array('CartaOrden', 'Cliente', 'EntidadCrediticia', 'Rubro', 'Clasificacion', 'Usuario');
    var $helpers = array('Formulario', 'Interfaz', 'AjaxAG');
    var $components = array('Interfaz', 'Maestro');
    var $layout = "ajax";
    var $paginate = array('limit' => 10, 'order' => array('CartaOrden.id' => 'DESC'));

    public function beforeFilter() {
        $this->validar_sesion();
    }
    
    public function afterFilter() {
        $this->auditoria();
    }
    
    public function index($busqueda = null) {
        extract($this->request->data);
        $data = null;
        $idCliente = null;
        $condiciones = array();
        $condicionesModelo = array();
        $condicionesCliente = array();
        $condiciones['CartaOrden.estatus !='] = 0;
        
        if(!empty($fechaInicio))
            $condiciones['DATE(CartaOrden.creado) BETWEEN ? AND ?'] = array($fechaInicio, $fechaFin);
        
        if(!empty($busqueda)){
            $condicionesModelo['CartaOrden.numero ILIKE'] = "%$busqueda%";
            $idCliente = $this->Cliente->buscar_clientes($busqueda);
            if (!empty($idCliente))
                $condicionesCliente['CartaOrden.cliente_id'] = $idCliente;
        } else {
            if(!empty($punto_id))
                $condiciones['CartaOrden.punto_id'] = $punto_id;
        }
        
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $data = $this->paginate($objCarOrd, array($condiciones, 'OR' => array($condicionesModelo, $condicionesCliente)));

        $this->set('url', $busqueda);
        $this->set('data', $data);
    }
    
    public function historial() {
        extract($this->request->data);
        $data = null;
        $condiciones['DATE(CartaOrden.creado)'] = date('Y-m-d');
        
        if(!empty($punto_id))
            $condiciones['CartaOrden.punto_id'] = $punto_id;
        
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $data = $this->paginate($objCarOrd, array($condiciones));

        $this->set('data', $data);
    }

    public function detalle() {
        extract($this->request->data);
        $idTr = $id;
        $id = $this->Interfaz->id($id);
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $objCarOrdDeta = $this->Maestro->modelo('punto', 'CartaOrdenDetalle', $tiendaSesion);

        $data = $objCarOrd->find('first', array('conditions' => array('CartaOrden.id' => $id)));
        $dataDetalle = $objCarOrdDeta->find('all', array('conditions' => array('CartaOrdenDetalle.carta_orden_id' => $id)));
        $datosUsuario = $this->Usuario->find('first', array('fields' => 'Usuario.usuario', 'conditions' => array('Usuario.id' => $data['CartaOrden']['usuario_id'])));

        $this->set('usuario', $datosUsuario['Usuario']['usuario']);
        $this->set('url', $id);
        $this->set('idTr', $idTr);
        $this->set('data', $data);
        $this->set('dataDetalle', $dataDetalle);
        $this->set('tienda', $tiendaSesion);
    }

    public function logs() {
        extract($this->request->data);
        $idCd = $this->Interfaz->id($idCd);

        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $logCartaOrden = $objCarOrd->query("SELECT * FROM fnc_log_documento($idCd,'CTO') AS (id integer,documento character varying,fecha timestamp without time zone,tipo integer,descripcion character varying);"
        );

        $this->set('log', $logCartaOrden);
    }
    
    public function nuevo(){
        $listaEntidades = $this->EntidadCrediticia->find('list', array('fields' => 'EntidadCrediticia.id, EntidadCrediticia.nombre', 'conditions' => array('EntidadCrediticia.estatus' => 1), 'order' => 'EntidadCrediticia.id'));
        $listaRubros = $this->Rubro->find('list', array('fields' => array('Rubro.id', 'Rubro.nombre'), 'conditions' => array('Rubro.estatus' => 1)));
        $this->Clasificacion->virtualFields['nombre'] = 'Clasificacion.codigo || \' - \' || Clasificacion.nombre';
        $listaClasificacion = $this->Clasificacion->find('list', array('fields' => array('Clasificacion.id', 'nombre'), 'conditions' => array('Clasificacion.estatus' => 1, 'Clasificacion.codigo !=' => '000'), 'order' => 'Clasificacion.nombre'));
        $this->set('listaEntidades', $listaEntidades);
        $this->set('listaRubros', $listaRubros);
        $this->set('listaClasificacion', $listaClasificacion);
    }
    
    public function guardar(){
        extract($this->request->data);
        $this->request->data['cliente_id'] = $this->request->data['cliente_id3'];
        $this->request->data['monto'] = $this->Interfaz->miles_postgres($this->request->data['monto']);
        $this->request->data['tienda_id'] = $this->Interfaz->id($this->Session->read('tienda_id_trabajo'));
        $this->request->data['usuario_id'] = $this->Interfaz->id($this->Session->read('usuario_id'));

        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarta = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $objCartaDet = $this->Maestro->modelo('punto', 'CartaOrdenDetalle', $tiendaSesion);
        $objCarta->query('BEGIN WORK');
        if ($objCarta->save($this->request->data)) {
            $dataCliente = $this->Cliente->find('first', array('fields' => 'Cliente.direccion', 'conditions' => array('Cliente.id' => $cliente_id3)));
            $dataRubro = $this->Rubro->find('first', array('fields' => 'Rubro.nombre', 'conditions' => array('Rubro.id' => $rubro_id)));
            $cartaArreglo = array();
            $cartaArreglo['Cabecera']['numero'] = null;
            $cartaArreglo['Cabecera']['numero_control'] = '-';
            $cartaArreglo['Cabecera']['clientenombre'] = $nombre;
            $cartaArreglo['Cabecera']['clientedocumento'] = $this->Interfaz->formatocedula(strtoupper($documento), false);
            $cartaArreglo['Cabecera']['clientedireccion'] = $dataCliente['Cliente']['direccion'];
            $cartaArreglo['Cabecera']['observacion'] = $observacion;
            $cartaArreglo['Cabecera']['fecha'] = date('d-m-Y');
            $cartaArreglo['Cabecera']['rubro'] = $dataRubro['Rubro']['nombre'];
            $cartaDetalle = array();
            foreach($montos as $indice => $valor){
                $dataClasificacion = $this->Clasificacion->find('first', array('fields' => array('Clasificacion.codigo', 'Clasificacion.nombre'), 'conditions' => array('Clasificacion.estatus' => 1, 'Clasificacion.id' => $clasificacion[$indice])));
                $cartaDetalle[$indice]['CartaOrdenDetalle']['carta_orden_id'] = $objCarta->id;
                $cartaDetalle[$indice]['CartaOrdenDetalle']['clasificacion_id'] = $clasificacion[$indice];
                $cartaDetalle[$indice]['CartaOrdenDetalle']['monto'] = $this->Interfaz->miles_postgres($valor);
                $cartaArreglo['Detalle'][$indice]['codigo'] = $dataClasificacion['Clasificacion']['codigo'];
                $cartaArreglo['Detalle'][$indice]['nombre'] = $dataClasificacion['Clasificacion']['nombre'];
                $cartaArreglo['Detalle'][$indice]['monto'] = $this->Interfaz->miles_postgres($valor);
            }
            $cartaArreglo['Pie']['totalneto'] = $monto;
            
            if ($objCartaDet->saveAll($cartaDetalle)) {
                $tienda = substr($this->Session->read('codigo_punto'), 1);
                $res = $objCarta->query("select fn_numero_carta('$tienda', {$objCarta->id}, {$this->Session->read('punto_id')}) as res");
                $resultado = explode('|', $res[0][0]['res']);
                if ($resultado[0] == 'true') {
                    $objCarta->query('COMMIT');
                    $cartaArreglo['Cabecera']['numero'] = $resultado[1];
                    echo "1*|*{$objCarta->id}*|*{$resultado[1]}*|*" . json_encode($cartaArreglo);
                } else {
                    $objCarta->query('ROLLBACK');
                    echo "2*|*{$resultado[1]}";
                }
            }
        }

        $this->autoRender = false;
    }

      public function modificar() {
        extract($this->request->data);
        $listaEntidades = $this->EntidadCrediticia->find('list', array('fields' => 'EntidadCrediticia.id, EntidadCrediticia.nombre', 'conditions' => array('EntidadCrediticia.estatus' => 1), 'order' => 'EntidadCrediticia.id'));
        $listaRubros = $this->Rubro->find('list', array('fields' => array('Rubro.id', 'Rubro.nombre'), 'conditions' => array('Rubro.estatus' => 1)));
        $this->Clasificacion->virtualFields['nombre'] = 'Clasificacion.codigo || \' - \' || Clasificacion.nombre';
        $listaClasificacion = $this->Clasificacion->find('list', array('fields' => array('Clasificacion.id', 'nombre'), 'conditions' => array('Clasificacion.estatus' => 1), 'order' => 'Clasificacion.nombre'));
        $id = $this->Interfaz->id($id);
        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $objCarOrdDeta = $this->Maestro->modelo('punto', 'CartaOrdenDetalle', $tiendaSesion);
        $data = $objCarOrd->find('first', array('conditions' => array('CartaOrden.id' => $id)));

        if($data['CartaOrden']['pagado'] == '0') {
            $dataDetalle = $objCarOrdDeta->find('all', array('conditions' => array('CartaOrdenDetalle.carta_orden_id' => $id)));
            $this->set('listaEntidades', $listaEntidades);
            $this->set('listaRubros', $listaRubros);
            $this->set('listaClasificacion', $listaClasificacion);
            $this->set('idTr', $idTr);
            $this->set('data', $data);
            $this->set('dataDetalle', $dataDetalle);
            $this->set('tienda', $tiendaSesion);
        } else {
            $this->autoRender = false;
        }
    }
    
     public function guardarModificar(){
        extract($this->request->data);
        $id = $this->Interfaz->id($id);
        $this->request->data['id'] = $id;
        $this->request->data['monto'] = $this->Interfaz->miles_postgres($monto);
        $this->request->data['cliente_id'] = $cliente_id3;
        $this->request->data['modificado'] = 'now()';

        $tiendaSesion = $this->Session->read('tiendaBD');
        $objCarOrd = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
        $dataVeri = $objCarOrd->find('first', array('conditions' => array('CartaOrden.id' => $id)));

        if($dataVeri['CartaOrden']['pagado'] == '0')
        {
            $tiendaSesion = $this->Session->read('tiendaBD');
            $objCarta = $this->Maestro->modelo('punto', 'CartaOrden', $tiendaSesion);
            $objCartaDet = $this->Maestro->modelo('punto', 'CartaOrdenDetalle', $tiendaSesion);
            $objCarta->query('BEGIN WORK');
       
            if ($objCarta->save($this->request->data)) {
                $cartaDetalle = array();
                foreach($montos as $indice => $valor){
                    $cartaDetalle[$indice]['CartaOrdenDetalle']['carta_orden_id'] = $objCarta->id;
                    $cartaDetalle[$indice]['CartaOrdenDetalle']['clasificacion_id'] = $clasificacion[$indice];
                    $cartaDetalle[$indice]['CartaOrdenDetalle']['monto'] = $this->Interfaz->miles_postgres($valor);
                }

                $objCartaDet->deleteAll(array('CartaOrdenDetalle.carta_orden_id' => $objCarta->id));
                if ($objCartaDet->saveAll($cartaDetalle)) {
                    $objCarta->query('COMMIT');
                    echo "1*|*{$objCarta->id}";
                } else {
                    $objCarta->query('ROLLBACK');
                    echo "2*|*";
                }
            }
        }
        else
        {
            echo "2_Esta carta orden ya ha sido usada.<br/>Por favor cargue otra carta orden.";
        }

        $this->autoRender = false;
    }


}
